/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
 */

/** @file table/roadveh_movement.h Data about how a road vehicle must drive on a tile */

static const RoadDriveEntry _roadveh_drive_data_0[] = {
	{15, 5},
	{14, 5},
	{13, 5},
	{12, 5},
	{11, 5},
	{10, 5},
	{ 9, 5},
	{ 8, 5},
	{ 7, 5},
	{ 6, 5},
	{ 5, 5},
	{ 4, 5},
	{ 3, 5},
	{ 2, 5},
	{ 1, 5},
	{ 0, 5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_1[] = {
	{5,  0},
	{5,  1},
	{5,  2},
	{5,  3},
	{5,  4},
	{5,  5},
	{5,  6},
	{5,  7},
	{5,  8},
	{5,  9},
	{5, 10},
	{5, 11},
	{5, 12},
	{5, 13},
	{5, 14},
	{5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_2[] = {
	{5, 0},
	{5, 1},
	{5, 2},
	{4, 3},
	{3, 4},
	{2, 5},
	{1, 5},
	{0, 5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_3[] = {
	{15,  5},
	{14,  5},
	{13,  5},
	{12,  5},
	{11,  5},
	{10,  5},
	{ 9,  6},
	{ 8,  7},
	{ 7,  8},
	{ 6,  9},
	{ 5, 10},
	{ 5, 11},
	{ 5, 12},
	{ 5, 13},
	{ 5, 14},
	{ 5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_4[] = {
	{ 5, 0},
	{ 5, 1},
	{ 5, 2},
	{ 5, 3},
	{ 5, 4},
	{ 5, 5},
	{ 6, 6},
	{ 7, 7},
	{ 8, 8},
	{ 9, 9},
	{10, 9},
	{11, 9},
	{12, 9},
	{13, 9},
	{14, 9},
	{15, 9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_5[] = {
	{0,  9},
	{1,  9},
	{2,  9},
	{3, 10},
	{4, 11},
	{5, 12},
	{5, 13},
	{5, 14},
	{5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_6[] = {
	{0, 6},
	{0, 7},
	{0, 8},
	{0, 9},
	{RDE_TURNED | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_7[] = {
	{6, 15},
	{7, 15},
	{8, 15},
	{9, 15},
	{RDE_TURNED | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_8[] = {
	{ 0, 9},
	{ 1, 9},
	{ 2, 9},
	{ 3, 9},
	{ 4, 9},
	{ 5, 9},
	{ 6, 9},
	{ 7, 9},
	{ 8, 9},
	{ 9, 9},
	{10, 9},
	{11, 9},
	{12, 9},
	{13, 9},
	{14, 9},
	{15, 9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_9[] = {
	{9, 15},
	{9, 14},
	{9, 13},
	{9, 12},
	{9, 11},
	{9, 10},
	{9,  9},
	{9,  8},
	{9,  7},
	{9,  6},
	{9,  5},
	{9,  4},
	{9,  3},
	{9,  2},
	{9,  1},
	{9,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_10[] = {
	{0, 9},
	{1, 9},
	{2, 9},
	{3, 9},
	{4, 9},
	{5, 9},
	{6, 8},
	{7, 7},
	{8, 6},
	{9, 5},
	{9, 4},
	{9, 3},
	{9, 2},
	{9, 1},
	{9, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_11[] = {
	{ 9, 15},
	{ 9, 14},
	{ 9, 13},
	{10, 12},
	{11, 11},
	{12, 10},
	{13,  9},
	{14,  9},
	{15,  9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_12[] = {
	{15, 5},
	{14, 5},
	{13, 5},
	{12, 4},
	{11, 3},
	{10, 2},
	{ 9, 1},
	{ 9, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_13[] = {
	{9, 15},
	{9, 14},
	{9, 13},
	{9, 12},
	{9, 11},
	{9, 10},
	{8,  9},
	{7,  8},
	{6,  7},
	{5,  6},
	{4,  5},
	{3,  5},
	{2,  5},
	{1,  5},
	{0,  5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_14[] = {
	{15, 8},
	{15, 7},
	{15, 6},
	{15, 5},
	{RDE_TURNED | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_15[] = {
	{8, 0},
	{7, 0},
	{6, 0},
	{5, 0},
	{RDE_TURNED | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_16[] = {
	{15, 9},
	{14, 9},
	{13, 9},
	{12, 9},
	{11, 9},
	{10, 9},
	{ 9, 9},
	{ 8, 9},
	{ 7, 9},
	{ 6, 9},
	{ 5, 9},
	{ 4, 9},
	{ 3, 9},
	{ 2, 9},
	{ 1, 9},
	{ 0, 9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_17[] = {
	{9,  0},
	{9,  1},
	{9,  2},
	{9,  3},
	{9,  4},
	{9,  5},
	{9,  6},
	{9,  7},
	{9,  8},
	{9,  9},
	{9, 10},
	{9, 11},
	{9, 12},
	{9, 13},
	{9, 14},
	{9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_18[] = {
	{9, 0},
	{9, 1},
	{9, 2},
	{9, 3},
	{9, 4},
	{9, 5},
	{8, 6},
	{7, 7},
	{6, 8},
	{5, 9},
	{4, 9},
	{3, 9},
	{2, 9},
	{1, 9},
	{0, 9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_19[] = {
	{15,  9},
	{14,  9},
	{13,  9},
	{12, 10},
	{11, 11},
	{10, 12},
	{ 9, 13},
	{ 9, 14},
	{ 9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_20[] = {
	{ 9, 0},
	{ 9, 1},
	{10, 2},
	{11, 3},
	{12, 4},
	{13, 5},
	{14, 5},
	{15, 5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_21[] = {
	{0,  5},
	{1,  5},
	{2,  5},
	{3,  5},
	{4,  5},
	{5,  6},
	{6,  7},
	{7,  8},
	{8,  9},
	{9, 10},
	{9, 11},
	{9, 12},
	{9, 13},
	{9, 14},
	{9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_22[] = {
	{0, 8},
	{0, 7},
	{0, 6},
	{0, 5},
	{RDE_TURNED | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_23[] = {
	{8, 15},
	{7, 15},
	{6, 15},
	{5, 15},
	{RDE_TURNED | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_24[] = {
	{ 0, 5},
	{ 1, 5},
	{ 2, 5},
	{ 3, 5},
	{ 4, 5},
	{ 5, 5},
	{ 6, 5},
	{ 7, 5},
	{ 8, 5},
	{ 9, 5},
	{10, 5},
	{11, 5},
	{12, 5},
	{13, 5},
	{14, 5},
	{15, 5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_25[] = {
	{5, 15},
	{5, 14},
	{5, 13},
	{5, 12},
	{5, 11},
	{5, 10},
	{5,  9},
	{5,  8},
	{5,  7},
	{5,  6},
	{5,  5},
	{5,  4},
	{5,  3},
	{5,  2},
	{5,  1},
	{5,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_26[] = {
	{0, 5},
	{1, 5},
	{2, 5},
	{3, 4},
	{4, 3},
	{5, 2},
	{5, 1},
	{5, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_27[] = {
	{ 5, 15},
	{ 5, 14},
	{ 5, 13},
	{ 5, 12},
	{ 5, 11},
	{ 5, 10},
	{ 6,  9},
	{ 7,  8},
	{ 8,  7},
	{ 9,  6},
	{10,  5},
	{11,  5},
	{12,  5},
	{13,  5},
	{14,  5},
	{15,  5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_28[] = {
	{15, 9},
	{14, 9},
	{13, 9},
	{12, 9},
	{11, 9},
	{10, 9},
	{ 9, 9},
	{ 8, 8},
	{ 7, 7},
	{ 6, 6},
	{ 5, 5},
	{ 5, 4},
	{ 5, 3},
	{ 5, 2},
	{ 5, 1},
	{ 5, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _roadveh_drive_data_29[] = {
	{5, 15},
	{5, 14},
	{5, 13},
	{5, 12},
	{4, 11},
	{3, 10},
	{2,  9},
	{1,  9},
	{0,  9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_30[] = {
	{15, 6},
	{15, 7},
	{15, 8},
	{15, 9},
	{RDE_TURNED | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_drive_data_31[] = {
	{6, 0},
	{7, 0},
	{8, 0},
	{9, 0},
	{RDE_TURNED | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _rv_station_left_sw_far[] = {
	{15,  5},
	{14,  5},
	{13,  6},
	{13,  7},
	{13,  8},
	{13,  9},
	{13, 10},
	{13, 11},
	{12, 12},
	{11, 12},
	{10, 12},
	{ 9, 12},
	{ 8, 12},
	{ 7, 12},
	{ 6, 12},
	{ 5, 11},
	{ 5, 10},
	{ 5,  9},
	{ 5,  8},
	{ 5,  7},
	{ 5,  6},
	{ 5,  7},
	{ 5,  8},
	{ 5,  9},
	{ 5, 10},
	{ 5, 11},
	{ 6, 12},
	{ 7, 12},
	{ 8, 12},
	{ 9, 12},
	{10, 12},
	{11, 12},
	{12, 12},
	{13, 11},
	{13, 10},
	{14,  9},
	{15,  9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _rv_station_left_nw_far[] = {
	{ 5,  0},
	{ 5,  1},
	{ 6,  2},
	{ 7,  2},
	{ 8,  2},
	{ 9,  2},
	{10,  2},
	{11,  2},
	{12,  3},
	{12,  4},
	{12,  5},
	{12,  6},
	{12,  7},
	{12,  8},
	{12,  9},
	{11, 10},
	{10, 10},
	{ 9, 10},
	{ 8, 10},
	{ 7, 10},
	{ 6, 10},
	{ 7, 10},
	{ 8, 10},
	{ 9, 10},
	{10, 10},
	{11, 10},
	{12,  9},
	{12,  8},
	{12,  7},
	{12,  6},
	{12,  5},
	{12,  4},
	{12,  3},
	{11,  2},
	{10,  2},
	{ 9,  1},
	{ 9,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _rv_station_left_sw_near[] = {
	{15,  5},
	{14,  5},
	{13,  6},
	{13,  7},
	{13,  8},
	{13,  9},
	{13, 10},
	{13, 11},
	{12, 12},
	{11, 12},
	{10, 12},
	{ 9, 11},
	{ 9, 10},
	{ 9,  9},
	{ 9,  8},
	{ 9,  7},
	{ 9,  6},
	{ 9,  7},
	{ 9,  8},
	{ 9,  9},
	{ 9, 10},
	{ 9, 11},
	{10, 12},
	{11, 12},
	{12, 12},
	{13, 11},
	{13, 10},
	{14,  9},
	{15,  9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _rv_station_left_nw_near[] = {
	{ 5, 0},
	{ 5, 1},
	{ 6, 2},
	{ 7, 2},
	{ 8, 2},
	{ 9, 2},
	{10, 2},
	{11, 2},
	{12, 3},
	{12, 4},
	{12, 5},
	{11, 6},
	{10, 6},
	{ 9, 6},
	{ 8, 6},
	{ 7, 6},
	{ 6, 6},
	{ 7, 6},
	{ 8, 6},
	{ 9, 6},
	{10, 6},
	{11, 6},
	{12, 5},
	{12, 4},
	{12, 3},
	{11, 2},
	{10, 2},
	{ 9, 1},
	{ 9, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _rv_station_left_ne_far[] = {
	{ 0, 9},
	{ 1, 9},
	{ 2, 8},
	{ 2, 7},
	{ 2, 6},
	{ 2, 5},
	{ 2, 4},
	{ 3, 3},
	{ 4, 3},
	{ 5, 3},
	{ 6, 3},
	{ 7, 3},
	{ 8, 3},
	{ 9, 3},
	{10, 4},
	{10, 5},
	{10, 6},
	{10, 7},
	{10, 8},
	{10, 9},
	{10, 8},
	{10, 7},
	{10, 6},
	{10, 5},
	{10, 4},
	{ 9, 3},
	{ 8, 3},
	{ 7, 3},
	{ 6, 3},
	{ 5, 3},
	{ 4, 3},
	{ 3, 3},
	{ 2, 4},
	{ 1, 5},
	{ 0, 5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _rv_station_left_se_far[] = {
	{9, 15},
	{9, 14},
	{8, 13},
	{7, 13},
	{6, 13},
	{5, 13},
	{4, 13},
	{3, 12},
	{3, 11},
	{3, 10},
	{3,  9},
	{3,  8},
	{3,  7},
	{3,  6},
	{4,  5},
	{5,  5},
	{6,  5},
	{7,  5},
	{8,  5},
	{9,  5},
	{8,  5},
	{7,  5},
	{6,  5},
	{5,  5},
	{4,  5},
	{3,  6},
	{3,  7},
	{3,  8},
	{3,  9},
	{3, 10},
	{3, 11},
	{3, 12},
	{4, 13},
	{5, 14},
	{5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _rv_station_left_ne_near[] = {
	{0, 9},
	{1, 9},
	{2, 8},
	{2, 7},
	{2, 6},
	{2, 5},
	{2, 4},
	{3, 3},
	{4, 3},
	{5, 3},
	{6, 4},
	{6, 5},
	{6, 6},
	{6, 7},
	{6, 8},
	{6, 9},
	{6, 8},
	{6, 7},
	{6, 6},
	{6, 5},
	{6, 4},
	{5, 3},
	{4, 3},
	{3, 3},
	{2, 4},
	{1, 5},
	{0, 5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _rv_station_left_se_near[] = {
	{9, 15},
	{9, 14},
	{8, 13},
	{7, 13},
	{6, 13},
	{5, 13},
	{4, 13},
	{3, 12},
	{3, 11},
	{3, 10},
	{4,  9},
	{5,  9},
	{6,  9},
	{7,  9},
	{8,  9},
	{9,  9},
	{8,  9},
	{7,  9},
	{6,  9},
	{5,  9},
	{4,  9},
	{3, 10},
	{3, 11},
	{3, 12},
	{4, 13},
	{5, 14},
	{5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _rv_station_right_sw_far[] = {
	{15,  9},
	{14,  9},
	{13, 10},
	{13, 11},
	{12, 12},
	{11, 12},
	{10, 12},
	{ 9, 12},
	{ 8, 12},
	{ 7, 12},
	{ 6, 12},
	{ 5, 11},
	{ 5, 10},
	{ 5,  9},
	{ 5,  8},
	{ 5,  7},
	{ 5,  6},
	{ 5,  7},
	{ 5,  8},
	{ 5,  9},
	{ 5, 10},
	{ 5, 11},
	{ 6, 12},
	{ 7, 12},
	{ 8, 12},
	{ 9, 12},
	{10, 12},
	{11, 12},
	{12, 12},
	{13, 11},
	{13, 10},
	{13,  9},
	{13,  8},
	{13,  7},
	{13,  6},
	{14,  5},
	{15,  5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _rv_station_right_nw_far[] = {
	{ 9,  0},
	{ 9,  1},
	{10,  2},
	{11,  2},
	{12,  3},
	{12,  4},
	{12,  5},
	{12,  6},
	{12,  7},
	{12,  8},
	{12,  9},
	{11, 10},
	{10, 10},
	{ 9, 10},
	{ 8, 10},
	{ 7, 10},
	{ 6, 10},
	{ 7, 10},
	{ 8, 10},
	{ 9, 10},
	{10, 10},
	{11, 10},
	{12,  9},
	{12,  8},
	{12,  7},
	{12,  6},
	{12,  5},
	{12,  4},
	{12,  3},
	{11,  2},
	{10,  2},
	{ 9,  2},
	{ 8,  2},
	{ 7,  2},
	{ 6,  2},
	{ 5,  1},
	{ 5,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _rv_station_right_sw_near[] = {
	{15,  9},
	{14,  9},
	{13, 10},
	{13, 11},
	{12, 12},
	{11, 12},
	{10, 12},
	{ 9, 11},
	{ 9, 10},
	{ 9,  9},
	{ 9,  8},
	{ 9,  7},
	{ 9,  6},
	{ 9,  7},
	{ 9,  8},
	{ 9,  9},
	{ 9, 10},
	{ 9, 11},
	{10, 12},
	{11, 12},
	{12, 12},
	{13, 11},
	{13, 10},
	{13,  9},
	{13,  8},
	{13,  7},
	{13,  6},
	{14,  5},
	{15,  5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};
static const RoadDriveEntry _rv_station_right_nw_near[] = {
	{ 9, 0},
	{ 9, 1},
	{10, 2},
	{11, 2},
	{12, 3},
	{12, 4},
	{12, 5},
	{11, 6},
	{10, 6},
	{ 9, 6},
	{ 8, 6},
	{ 7, 6},
	{ 6, 6},
	{ 7, 6},
	{ 8, 6},
	{ 9, 6},
	{10, 6},
	{11, 6},
	{12, 5},
	{12, 4},
	{12, 3},
	{11, 2},
	{10, 2},
	{ 9, 2},
	{ 8, 2},
	{ 7, 2},
	{ 6, 2},
	{ 5, 1},
	{ 5, 0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};
static const RoadDriveEntry _rv_station_right_ne_far[] = {
	{ 0, 5},
	{ 1, 5},
	{ 2, 4},
	{ 3, 3},
	{ 4, 3},
	{ 5, 3},
	{ 6, 3},
	{ 7, 3},
	{ 8, 3},
	{ 9, 3},
	{10, 4},
	{10, 5},
	{10, 6},
	{10, 7},
	{10, 8},
	{10, 9},
	{10, 8},
	{10, 7},
	{10, 6},
	{10, 5},
	{10, 4},
	{ 9, 3},
	{ 8, 3},
	{ 7, 3},
	{ 6, 3},
	{ 5, 3},
	{ 4, 3},
	{ 3, 3},
	{ 2, 4},
	{ 2, 5},
	{ 2, 6},
	{ 2, 7},
	{ 2, 8},
	{ 1, 9},
	{ 0, 9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _rv_station_right_se_far[] = {
	{5, 15},
	{5, 14},
	{4, 13},
	{3, 12},
	{3, 11},
	{3, 10},
	{3,  9},
	{3,  8},
	{3,  7},
	{3,  6},
	{4,  5},
	{5,  5},
	{6,  5},
	{7,  5},
	{8,  5},
	{9,  5},
	{8,  5},
	{7,  5},
	{6,  5},
	{5,  5},
	{4,  5},
	{3,  6},
	{3,  7},
	{3,  8},
	{3,  9},
	{3, 10},
	{3, 11},
	{3, 12},
	{4, 13},
	{5, 13},
	{6, 13},
	{7, 13},
	{8, 13},
	{9, 14},
	{9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _rv_station_right_ne_near[] = {
	{0, 5},
	{1, 5},
	{2, 4},
	{3, 3},
	{4, 3},
	{5, 3},
	{6, 4},
	{6, 5},
	{6, 6},
	{6, 7},
	{6, 8},
	{6, 9},
	{6, 8},
	{6, 7},
	{6, 6},
	{6, 5},
	{6, 4},
	{5, 3},
	{4, 3},
	{3, 3},
	{2, 4},
	{2, 5},
	{2, 6},
	{2, 7},
	{2, 8},
	{1, 9},
	{0, 9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _rv_station_right_se_near[] = {
	{5, 15},
	{5, 14},
	{4, 13},
	{3, 12},
	{3, 11},
	{3, 10},
	{4,  9},
	{5,  9},
	{6,  9},
	{7,  9},
	{8,  9},
	{9,  9},
	{8,  9},
	{7,  9},
	{6,  9},
	{5,  9},
	{4,  9},
	{3, 10},
	{3, 11},
	{3, 12},
	{4, 13},
	{5, 13},
	{6, 13},
	{7, 13},
	{8, 13},
	{9, 14},
	{9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};

static const RoadDriveEntry * const _road_road_drive_data[] = {
	_roadveh_drive_data_0,
	_roadveh_drive_data_1,
	_roadveh_drive_data_2,
	_roadveh_drive_data_3,
	_roadveh_drive_data_4,
	_roadveh_drive_data_5,
	_roadveh_drive_data_6,
	_roadveh_drive_data_7,
	_roadveh_drive_data_8,
	_roadveh_drive_data_9,
	_roadveh_drive_data_10,
	_roadveh_drive_data_11,
	_roadveh_drive_data_12,
	_roadveh_drive_data_13,
	_roadveh_drive_data_14,
	_roadveh_drive_data_15,
	_roadveh_drive_data_16,
	_roadveh_drive_data_17,
	_roadveh_drive_data_18,
	_roadveh_drive_data_19,
	_roadveh_drive_data_20,
	_roadveh_drive_data_21,
	_roadveh_drive_data_22,
	_roadveh_drive_data_23,
	_roadveh_drive_data_24,
	_roadveh_drive_data_25,
	_roadveh_drive_data_26,
	_roadveh_drive_data_27,
	_roadveh_drive_data_28,
	_roadveh_drive_data_29,
	_roadveh_drive_data_30,
	_roadveh_drive_data_31,
	_rv_station_left_sw_far,
	_rv_station_left_nw_far,
	_rv_station_left_sw_near,
	_rv_station_left_nw_near,
	_rv_station_left_sw_far,
	_rv_station_left_nw_far,
	_rv_station_left_sw_near,
	_rv_station_left_nw_near,
	_rv_station_left_ne_far,
	_rv_station_left_se_far,
	_rv_station_left_ne_near,
	_rv_station_left_se_near,
	_rv_station_left_ne_far,
	_rv_station_left_se_far,
	_rv_station_left_ne_near,
	_rv_station_left_se_near,
	_rv_station_right_sw_far,
	_rv_station_right_nw_far,
	_rv_station_right_sw_near,
	_rv_station_right_nw_near,
	_rv_station_right_sw_far,
	_rv_station_right_nw_far,
	_rv_station_right_sw_near,
	_rv_station_right_nw_near,
	_rv_station_right_ne_far,
	_rv_station_right_se_far,
	_rv_station_right_ne_near,
	_rv_station_right_se_near,
	_rv_station_right_ne_far,
	_rv_station_right_se_far,
	_rv_station_right_ne_near,
	_rv_station_right_se_near,
};

/** Table of road stop stop frames, when to stop at a road stop. */
extern const uint8_t _road_stop_stop_frame[] = {
	/* Duplicated left and right because of "entered stop" bit */
	20, 20, 16, 16,  20, 20, 16, 16,
	19, 19, 15, 15,  19, 19, 15, 15,
	16, 16, 12, 12,  16, 16, 12, 12,
	15, 15, 11, 11,  15, 15, 11, 11
};

static const RoadDriveEntry _roadveh_tram_turn_ne_0[] = {
	{15, 5},
	{14, 5},
	{13, 5},
	{12, 5},
	{11, 5},
	{10, 5},
	{ 9, 5},
	{ 8, 5},
	{ 7, 5},
	{ 6, 5},
	{ 5, 5},
	{ 4, 5},
	{ 3, 5},
	{ 2, 5},
	{ 1, 5},
	{ 0, 5},
	{ 0, 6},
	{ 0, 7},
	{ 0, 8},
	{ 0, 9},
	{RDE_TURNED | DIAGDIR_SW, 0},
	{ 1, 9},
	{ 2, 9},
	{ 3, 9},
	{ 4, 9},
	{ 5, 9},
	{ 6, 9},
	{ 7, 9},
	{ 8, 9},
	{ 9, 9},
	{10, 9},
	{11, 9},
	{12, 9},
	{13, 9},
	{14, 9},
	{15, 9},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};

static const RoadDriveEntry _roadveh_tram_turn_ne_1[] = {
	{15, 9},
	{14, 9},
	{13, 9},
	{12, 9},
	{11, 9},
	{10, 9},
	{ 9, 9},
	{ 8, 9},
	{ 7, 9},
	{ 6, 9},
	{ 5, 9},
	{ 4, 9},
	{ 3, 9},
	{ 2, 9},
	{ 1, 9},
	{ 0, 9},
	{ 0, 8},
	{ 0, 7},
	{ 0, 6},
	{ 0, 5},
	{RDE_TURNED | DIAGDIR_SW, 0},
	{ 1, 5},
	{ 2, 5},
	{ 3, 5},
	{ 4, 5},
	{ 5, 5},
	{ 6, 5},
	{ 7, 5},
	{ 8, 5},
	{ 9, 5},
	{10, 5},
	{11, 5},
	{12, 5},
	{13, 5},
	{14, 5},
	{15, 5},
	{RDE_NEXT_TILE | DIAGDIR_SW, 0}
};

static const RoadDriveEntry _roadveh_tram_turn_se_0[] = {
	{5,  0},
	{5,  1},
	{5,  2},
	{5,  3},
	{5,  4},
	{5,  5},
	{5,  6},
	{5,  7},
	{5,  8},
	{5,  9},
	{5, 10},
	{5, 11},
	{5, 12},
	{5, 13},
	{5, 14},
	{5, 15},
	{6, 15},
	{7, 15},
	{8, 15},
	{9, 15},
	{RDE_TURNED | DIAGDIR_NW, 0},
	{9, 14},
	{9, 13},
	{9, 12},
	{9, 11},
	{9, 10},
	{9,  9},
	{9,  8},
	{9,  7},
	{9,  6},
	{9,  5},
	{9,  4},
	{9,  3},
	{9,  2},
	{9,  1},
	{9,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};

static const RoadDriveEntry _roadveh_tram_turn_se_1[] = {
	{9,  0},
	{9,  1},
	{9,  2},
	{9,  3},
	{9,  4},
	{9,  5},
	{9,  6},
	{9,  7},
	{9,  8},
	{9,  9},
	{9, 10},
	{9, 11},
	{9, 12},
	{9, 13},
	{9, 14},
	{9, 15},
	{8, 15},
	{7, 15},
	{6, 15},
	{5, 15},
	{RDE_TURNED | DIAGDIR_NW, 0},
	{5, 14},
	{5, 13},
	{5, 12},
	{5, 11},
	{5, 10},
	{5,  9},
	{5,  8},
	{5,  7},
	{5,  6},
	{5,  5},
	{5,  4},
	{5,  3},
	{5,  2},
	{5,  1},
	{5,  0},
	{RDE_NEXT_TILE | DIAGDIR_NW, 0}
};

static const RoadDriveEntry _roadveh_tram_turn_sw_0[] = {
	{ 0, 9},
	{ 1, 9},
	{ 2, 9},
	{ 3, 9},
	{ 4, 9},
	{ 5, 9},
	{ 6, 9},
	{ 7, 9},
	{ 8, 9},
	{ 9, 9},
	{10, 9},
	{11, 9},
	{12, 9},
	{13, 9},
	{14, 9},
	{15, 9},
	{15, 8},
	{15, 7},
	{15, 6},
	{15, 5},
	{RDE_TURNED | DIAGDIR_NE, 0},
	{14, 5},
	{13, 5},
	{12, 5},
	{11, 5},
	{10, 5},
	{ 9, 5},
	{ 8, 5},
	{ 7, 5},
	{ 6, 5},
	{ 5, 5},
	{ 4, 5},
	{ 3, 5},
	{ 2, 5},
	{ 1, 5},
	{ 0, 5},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};
static const RoadDriveEntry _roadveh_tram_turn_sw_1[] = {
	{ 0, 5},
	{ 1, 5},
	{ 2, 5},
	{ 3, 5},
	{ 4, 5},
	{ 5, 5},
	{ 6, 5},
	{ 7, 5},
	{ 8, 5},
	{ 9, 5},
	{10, 5},
	{11, 5},
	{12, 5},
	{13, 5},
	{14, 5},
	{15, 5},
	{15, 6},
	{15, 7},
	{15, 8},
	{15, 9},
	{RDE_TURNED | DIAGDIR_NE, 0},
	{14, 9},
	{13, 9},
	{12, 9},
	{11, 9},
	{10, 9},
	{ 9, 9},
	{ 8, 9},
	{ 7, 9},
	{ 6, 9},
	{ 5, 9},
	{ 4, 9},
	{ 3, 9},
	{ 2, 9},
	{ 1, 9},
	{ 0, 9},
	{RDE_NEXT_TILE | DIAGDIR_NE, 0}
};

static const RoadDriveEntry _roadveh_tram_turn_nw_0[] = {
	{9, 15},
	{9, 14},
	{9, 13},
	{9, 12},
	{9, 11},
	{9, 10},
	{9,  9},
	{9,  8},
	{9,  7},
	{9,  6},
	{9,  5},
	{9,  4},
	{9,  3},
	{9,  2},
	{9,  1},
	{9,  0},
	{8,  0},
	{7,  0},
	{6,  0},
	{5,  0},
	{RDE_TURNED | DIAGDIR_SE, 0},
	{5,  1},
	{5,  2},
	{5,  3},
	{5,  4},
	{5,  5},
	{5,  6},
	{5,  7},
	{5,  8},
	{5,  9},
	{5, 10},
	{5, 11},
	{5, 12},
	{5, 13},
	{5, 14},
	{5, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};
static const RoadDriveEntry _roadveh_tram_turn_nw_1[] = {
	{5, 15},
	{5, 14},
	{5, 13},
	{5, 12},
	{5, 11},
	{5, 10},
	{5,  9},
	{5,  8},
	{5,  7},
	{5,  6},
	{5,  5},
	{5,  4},
	{5,  3},
	{5,  2},
	{5,  1},
	{5,  0},
	{6,  0},
	{7,  0},
	{8,  0},
	{9,  0},
	{RDE_TURNED | DIAGDIR_SE, 0},
	{9,  1},
	{9,  2},
	{9,  3},
	{9,  4},
	{9,  5},
	{9,  6},
	{9,  7},
	{9,  8},
	{9,  9},
	{9, 10},
	{9, 11},
	{9, 12},
	{9, 13},
	{9, 14},
	{9, 15},
	{RDE_NEXT_TILE | DIAGDIR_SE, 0}
};

static const RoadDriveEntry * const _road_tram_drive_data[] = {
	_roadveh_drive_data_0,
	_roadveh_drive_data_1,
	_roadveh_drive_data_2,
	_roadveh_drive_data_3,
	_roadveh_drive_data_4,
	_roadveh_drive_data_5,
	_roadveh_tram_turn_ne_0,
	_roadveh_tram_turn_se_0,
	_roadveh_drive_data_8,
	_roadveh_drive_data_9,
	_roadveh_drive_data_10,
	_roadveh_drive_data_11,
	_roadveh_drive_data_12,
	_roadveh_drive_data_13,
	_roadveh_tram_turn_sw_0,
	_roadveh_tram_turn_nw_0,
	_roadveh_drive_data_16,
	_roadveh_drive_data_17,
	_roadveh_drive_data_18,
	_roadveh_drive_data_19,
	_roadveh_drive_data_20,
	_roadveh_drive_data_21,
	_roadveh_tram_turn_ne_1,
	_roadveh_tram_turn_se_1,
	_roadveh_drive_data_24,
	_roadveh_drive_data_25,
	_roadveh_drive_data_26,
	_roadveh_drive_data_27,
	_roadveh_drive_data_28,
	_roadveh_drive_data_29,
	_roadveh_tram_turn_sw_1,
	_roadveh_tram_turn_nw_1,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
	nullptr,
};

static const RoadDriveEntry * const * const _road_drive_data[2] = {
	_road_road_drive_data,
	_road_tram_drive_data,
};
